<?php declare(strict_types=1); namespace App\Controller\User; use App\Entity\User; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Http\Attribute\CurrentUser; #[Route('/users', name: 'user.')] class UserController extends AbstractController { #[Route(name: 'list')] public function list(#[CurrentUser] ?User $user, Request $request): Response { dd($user->getFirstName()); } Call to a member function getFirstName() on null
Pero estoy autorizado. En Symfony Profiler, muestra que estoy conectado.
Entorno: PHP 8.0.11 Symfony 5.3.9
Los detalles correctos sobre la solución son proporcionados por https://stackoverflow.com/users/1144627/will-b El atributo Symfony #[CurrentUser] devuelve nulo
El problema es causado por ParamConvertor habilitado ( sensio/framework-extra-bundle ). No puede resolver el Usuario debido a la falta de definiciones de cómo obtener la Entidad de la base de datos, por lo que establece la variable $user en null debido al #[CurrentUser] ?User $user anulable. Si desea mantener la funcionalidad del convertidor de parámetros y el atributo #[CurrentUser] al mismo tiempo, debe deshabilitar la conversión automática #
config/packages/sensio_framework_extra.yaml sensio_framework_extra: request: converters: true auto_convert: falseY defina los parámetros de ruta cada vez manualmente. Fuentes: https://symfony.com/bundles/SensioFrameworkExtraBundle/current/annotations/converters.html https://symfony.com/blog/new-in-symfony-5-2-controller-argument-attributes https:// symfony.com/doc/current/controller/argument_value_resolver.html
Solución para evitar estos problemas: Lea los documentos al 200 % de la escala del navegador.
si su controlador extiende "AbstractController", puede usar $this->getUser() para obtener el usuario actual.
en su función de lista, no está dando una identificación de usuario ni un $ usuario, por lo que $ usuario es racionalmente nulo
#[Route('/users', name: 'user.')] class UserController extends AbstractController { #[Route(name: 'list')] public function list( Request $request): Response { dd($this->getUser()->getFirstName()); }